﻿using System;
using System.IO;
using System.Xml;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.Collections.Generic;
using Modelo;


namespace Negocio
{
    public class Xml
    {
        public static string xmlCriado;

        public static CodeSnippets codeSnippets;

        /// <summary>
        /// Método responsável por serializar objeto CodeSnippets
        /// </summary>
        /// <param name="objeto">Objeto do tipo CodeSnippet</param>
        /// <returns>Xml Serializado</returns>
        public static string SerializarObjeto(CodeSnippets objeto)
        {
            try
            {
                string xml = string.Empty;

                XmlSerializer objSerializer = new XmlSerializer(objeto.GetType());

                MemoryStream localArmazenamentoArquivoXml = new MemoryStream();
                XmlTextWriter escritorArquivoXML = new XmlTextWriter(localArmazenamentoArquivoXml, Encoding.UTF8);
                objSerializer.Serialize(escritorArquivoXML, objeto);

                xml = Encoding.UTF8.GetString(localArmazenamentoArquivoXml.GetBuffer());
                xml = xml.Replace(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", string.Empty);

                localArmazenamentoArquivoXml.Dispose();
                localArmazenamentoArquivoXml.Close();
                escritorArquivoXML.Flush();
                escritorArquivoXML.Close();

                return xmlCriado = xml;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        
        /// <summary>
        /// Método responsável por deserializar xml.
        /// </summary>
        /// <param name="xml">Xml contendo a estrutura do objeto codeSnippet</param>
        /// <returns>Objeto CodeSnippets</returns>
        public static CodeSnippets DeserializaObjeto(string xml)
        { 
            try 
	        {	        
		        codeSnippets = new CodeSnippets();
                XmlSerializer serializador = new XmlSerializer(codeSnippets.GetType());
                XmlTextReader leitorArquivoXml = new XmlTextReader(xml);

                serializador.Deserialize(leitorArquivoXml);

                return codeSnippets;
	        }
	        catch (Exception ex)
	        {
		        throw new Exception(ex.Message);
	        }
        }
    }
}